package com.unju.ventanas.gantt;

import javax.swing.JFrame;
import javax.swing.JPanel;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import org.apache.log4j.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.IntervalCategoryDataset;
import org.jfree.data.gantt.Task;
import org.jfree.data.gantt.TaskSeries;
import org.jfree.data.gantt.TaskSeriesCollection;
import org.jfree.data.time.SimpleTimePeriod;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

import com.unju.clases.Proyecto;
import com.unju.clases.ProyectoActividad;
import com.unju.ventanas.proyecto.JPGestionProyecto;

import demo.GanttDemo1;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class JDialogDiagramaGannt extends JFrame  {

	private final JPanel contentPanel = new JPanel();
	final static Logger logger = Logger.getLogger(JDialogDiagramaGannt.class);

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			final JDialogDiagramaGannt demo = new JDialogDiagramaGannt(new Proyecto());
	        demo.pack();
	        RefineryUtilities.centerFrameOnScreen(demo);
	        demo.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the dialog.
	 */
	public JDialogDiagramaGannt(Proyecto p) {
		super(p.getNombre());

		addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent arg0) {
				logger.debug("Cerrar ventana");
				dispose();
			}
			@Override
			public void windowClosed(WindowEvent e) {
				logger.debug("window closed event");
			}
		});
		super.setDefaultCloseOperation(ApplicationFrame.DO_NOTHING_ON_CLOSE);
		setSize(800, 400);
		setLocationRelativeTo(null);
		//setAlwaysOnTop(true);				
				
        //IntervalCategoryDataset dataset = createDataset();
		IntervalCategoryDataset dataset = crearActividades(p);
        JFreeChart chart = createChart(dataset);

        // add the chart to a panel...
        ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(800, 400));
        setContentPane(chartPanel);
        
        setVisible(true);
	}
	public static IntervalCategoryDataset crearActividades(Proyecto p){
		TaskSeries actividadActual = new TaskSeries("Fecha Actual");
        TaskSeries actividadEstimada = new TaskSeries("Fecha Estimada");
        int cantAct=p.getProyectoActividad().size();
        ArrayList<ProyectoActividad> listaAct=(ArrayList<ProyectoActividad>) p.getProyectoActividad();
        for (int i = 0; i < cantAct; i++) {
        	
        	actividadEstimada.add(new Task(listaAct.get(i).getActividad().getNombre(),
                    new SimpleTimePeriod(listaAct.get(i).getFechaIniEst(),
                             listaAct.get(i).getFechaFinEst())));
        	
             actividadActual.add(new Task(listaAct.get(i).getActividad().getNombre(),
                     new SimpleTimePeriod(listaAct.get(i).getFechaIniReal(),
                    		 listaAct.get(i).getFechaFinReal())));
		}
        TaskSeriesCollection collection = new TaskSeriesCollection();
        collection.add(actividadActual);
        collection.add(actividadEstimada);
        return collection;
	}
	public static IntervalCategoryDataset createDataset() {        
        TaskSeries actividadActual = new TaskSeries("Fecha Actual");
        TaskSeries actividadEstimada = new TaskSeries("Fecha Estimada");
        
        actividadEstimada.add(new Task("Inst. Electrica",
               new SimpleTimePeriod(date(1, Calendar.APRIL, 2001),
                                    date(7, Calendar.APRIL, 2001))));
        actividadActual.add(new Task("Inst. Electrica",
                new SimpleTimePeriod(date(1, Calendar.APRIL, 2001),
                                     date(10, Calendar.APRIL, 2001))));
                        
        actividadEstimada.add(new Task("Inst. de cables de Red",
               new SimpleTimePeriod(date(7, Calendar.APRIL, 2001),
                                    date(14, Calendar.APRIL, 2001))));
        actividadActual.add(new Task("Inst. de cables de Red",
                new SimpleTimePeriod(date(10, Calendar.APRIL, 2001),
                                     date(17, Calendar.APRIL, 2001))));
        
        
        actividadEstimada.add(new Task("Inst. de Equipamiento de Muebles",
               new SimpleTimePeriod(date(15, Calendar.APRIL, 2001),
                                    date(5, Calendar.MAY, 2001))));
        actividadActual.add(new Task("Inst. de Equipamiento de Muebles",
                new SimpleTimePeriod(date(18, Calendar.APRIL, 2001),
                                     date(15, Calendar.MAY, 2001))));
        
        actividadEstimada.add(new Task("Inst. de PCs",
               new SimpleTimePeriod(date(6, Calendar.MAY, 2001),
                                    date(30, Calendar.MAY, 2001))));
        actividadActual.add(new Task("Inst. de PCs",
                new SimpleTimePeriod(date(15, Calendar.MAY, 2001),
                                     date(17, Calendar.MAY, 2001))));
        
        actividadEstimada.add(new Task("Inst. de Software",
               new SimpleTimePeriod(date(2, Calendar.JUNE, 2001),
                                    date(6, Calendar.JUNE, 2001))));
        actividadActual.add(new Task("Inst. de Software",
                new SimpleTimePeriod(date(2, Calendar.JUNE, 2001),
                                     date(10, Calendar.JUNE, 2001))));
        
        actividadEstimada.add(new Task("Config. de las PCs",
               new SimpleTimePeriod(date(7, Calendar.JUNE, 2001),
                                    date(13, Calendar.JUNE, 2001))));
        actividadActual.add(new Task("Config. de las PCs",
                new SimpleTimePeriod(date(11, Calendar.JUNE, 2001),
                                     date(21, Calendar.JUNE, 2001))));
        
        actividadEstimada.add(new Task("Testing de los Equipos",
               new SimpleTimePeriod(date(14, Calendar.JUNE, 2001),
                                    date(20, Calendar.JUNE, 2001))));
        actividadActual.add(new Task("Testing de los Equipos",
                new SimpleTimePeriod(date(22, Calendar.JUNE, 2001),
                                     date(1, Calendar.JULY, 2001))));           

        TaskSeriesCollection collection = new TaskSeriesCollection();
        collection.add(actividadActual);
        collection.add(actividadEstimada);
        

        return collection;
    }
	
	private static Date date(final int day, final int month, final int year) {

        final Calendar calendar = Calendar.getInstance();
        calendar.set(year, month, day);
        final Date result = calendar.getTime();
        return result;

    }
	
	private JFreeChart createChart(final IntervalCategoryDataset dataset) {
        final JFreeChart chart = ChartFactory.createGanttChart(
            "Nueva Sala de Computos",  // chart title
            "Actividades",              // domain axis label
            "Fecha",              // range axis label
            dataset,             // data
            true,                // include legend
            true,                // tooltips
            false                // urls
        );    
//        chart.getCategoryPlot().getDomainAxis().setMaxCategoryLabelWidthRatio(10.0f);
        return chart;    
    }


}
